##
# Event Custom decorators
# @copyright DbSolutions, SoftwareLowCost, ClickToSpeak
# 

def wizcleaner(fun):
    def cleaner(request, *args, **kwargs):
        import re
        if not re.search("wizard",request.META['PATH_INFO']):
            try: del request.session["wiz"]
            except: pass
        return fun(request, *args, **kwargs)    
    return cleaner

def setDecorator(decorator):
    """
        setDecorator
        Wrapper del decoratore
        
        @param function wrapFunc
    """
    def _outerDec(targetFunction):
        """
            _outerDec
            Decorator esterno
            
            @param function targetFunction funzione target
        """
        def _innerDec(*args, **kwargs):
            """
                _innerDec
                Decorator interno
                
                @param array *args argomenti della funzione
                @param array **kwargs keyvalues
            """
            decorator(targetFunction, args, kwargs)
            return targetFunction(*args, **kwargs)
        return _innerDec
    return _outerDec

def catchEvent(f, args, kwargs): 
    """
        Funzione di richiamo degli osservatori (Azioni)
        in base all'evento generato dal metodo osservato.
    
        @param function f funzione target da wrappare
        @param array args argomenti della funzione target
        @param array kwargs keywords della funzione target
    """
    from dispatchers import EventDispatcher
    EventDispatcher().fireEvent(f.__name__)
catchEvent = setDecorator(catchEvent)


def setUrl(f, args, kwargs):
    """
        @param function f funzione target da wrappare
        @param array args argomenti della funzione target
        @param array kwargs keywords della funzione target
    """
    #from dispatchers import UrlDispatcher
    print "cacca"
    return
setUrl = setDecorator(setUrl)
    
